- Use recursion to write a function that determines the length of a string
int strlen(char * str) { if (str[0] == 0) return 0; return 1 + strlen(str + 1); } - What’s the number after F in hexadecimal?0×10
- Bitwise: what is 7 | 1? 7 & 1? ~7?
7 (0111). 1 (0001). -8 (1000).
- Write a script that prints the numbers from 1 to 100. But for multiples of four print “Four” instead of the number and for the multiples of seven print “Seven”. For numbers which are multiples of both four and seven print “FourSeven”.
for (int ii = 1; ii <= 100; ii++) { boolean isMultipleOfFour = (ii % 4 == 0); boolean isMultipleOfSeven = (ii % 7 == 0); if (isMultipleOfFour && isMultipleOfSeven) System.out.println("FourSeven"); else if (isMultipleOfFour) System.out.println("Four"); else if (isMultipleOfSeven) System.out.println("Seven"); else System.out.println(ii); }
March 2008
Wed 12 Mar 2008
Mon 10 Mar 2008
ATG Consulting Interview
Posted by Frank Kim under Commerce , Form Handlers , Java SE , Nucleus , Repository[3] Comments
Today I had the most detailed but at same time most interesting ATG consulting interview yet. Here are the questions I was asked with answers when appropriate in italics.
- Which versions of ATG have you worked with?
- What parts of ATG’s stack have you worked with?
- How do you compare ATG with Ruby on Rails?
- What is Nucleus?
- What is the ATG Repository?
- When creating form handlers typically what ATG base class do you extend? GenericFormHandler.java
- When creating droplets what ATG base class do you extend? DynamoServlet.java
- What form handlers and methods do you use during checkout? ShoppingCartFormHandler, numerous handlers like handleMoveToConfirm, etc.
- What does a user typically see during checkout? Add to shopping cart, login, billing and shipping address, payment, confirm, confirmation, email confirmation, shipped email.
- How do you compare strings in Java? If String a = “hello” and String b= “hello” what is a == b? True, a and b both reference the same constant string.
In another interview I was asked these questions.
- What is HTTP? How does it work?
- If HTTP is stateless then how does a web application maintain state.
Wed 5 Mar 2008
Today when I started up phpMyAdmin (version 2.10.0.2) by going to http://localhost/phpMyAdmin I saw this error screen.
phpMyAdmin - Error |
I googled around but could not find any solutions.
So I went and tried to install the latest version of phpMyAdmin, 2.11.5. When I tried to run setup I saw this error screen.
phpMyAdmin - Error |
| Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly. |
Now that I had an error message to work with I googled around and found this post, Xampp phpMyAdmin Problem, which helped me diagnose the problem.
It turns out during one of my cleaning sessions I wiped out the session directory in, “C:\DOCUME~1\fkim\LOCALS~1\Temp\php\session.” After restoring it I ran into my next problem.
phpMyAdmin - Error |
Cannot load mysql extension. Please check your PHP configuration. - Documentation |
I upgraded to PHP 5.2.5 from 5.2.1 but that did not help. I installed the mbstring module but that did not help.
Finally I added the PHP extension directory to the path (I had already added the PHP directory to the path) and it finally worked! My path now includes the following two directories, E:\Program Files\PHP and E:\Program Files\PHP\ext.
Mon 3 Mar 2008
I have a table of data that tracks the mileage of my beloved 2005 Toyota Prius.
+----+------------+---------+---------+-------+ | id | date | mileage | gallons | cost | +----+------------+---------+---------+-------+ | 1 | 2005-02-14 | 280 | 8.615 | 16.03 | | 2 | 2005-02-27 | 480 | 4.775 | 8.59 | | 3 | 2005-03-19 | 713 | 7.213 | 14.27 | | 4 | 2005-04-09 | 999 | 7.86 | 16.81 | | 5 | 2005-04-11 | 1172 | 3.174 | 6.63 | | 6 | 2005-05-05 | 1560 | 8.889 | 18.66 | | 7 | 2005-06-07 | 1985 | 9.815 | 20.01 | | 8 | 2005-07-03 | 2444 | 9.868 | 21.7 | | 9 | 2005-08-13 | 2762 | 7.728 | 20 | | 10 | 2005-09-11 | 3271 | 10.072 | 30.11 | | 11 | 2005-10-24 | 3646 | 8.953 | 22.19 | | 12 | 2005-10-30 | 3959 | 6.583 | 17.11 | | 13 | 2005-11-04 | 4184 | 4.538 | 11.25 | | 14 | 2005-11-21 | 4631 | 8.742 | 18 | | 15 | 2005-12-31 | 4897 | 8.511 | 18.64 | | 16 | 2006-02-02 | 5609 | 7.83 | 18 | | 17 | 2006-03-01 | 6064 | 3.38 | 7.16 | | 18 | 2006-03-13 | 6400 | 7.171 | 16.2 | | 19 | 2006-03-22 | 6605 | 5.399 | 13.17 | | 22 | 2006-02-16 | 5944 | 7.957 | 17.5 | | 20 | 2006-04-06 | 6974 | 7.774 | 19.43 | | 21 | 2006-04-23 | 7316 | 7.102 | 20.45 | +----+------------+---------+---------+-------+
I wanted a way to calculate how many miles were driven for each trip, i.e. between consecutive dates, and what was the miles per gallon (MPG) for that trip. To do this I modified what I learned in this post, unique ID field, getting next and previous existing ID from table to create a view that does all these calculations. The advantage of this view is that it does not matter what order I enter the data, it will always calculate correctly.
CREATE VIEW v_prius_mpg AS
SELECT id, date, mileage, gallons, cost, mileage as trip_mileage,
mileage / gallons AS mpg, cost / gallons AS price_per_gallon
FROM prius_mpg
WHERE id = 1
UNION
SELECT New.id AS id, New.date, New.mileage, New.gallons, New.cost,
(New.mileage - Old.mileage) AS trip_mileage,
(New.mileage - Old.mileage)/ New.gallons AS mpg,
(New.cost / New.gallons) AS price_per_gallon
FROM prius_mpg New, prius_mpg Old
WHERE New.id > 1
AND Old.id =
(SELECT id
FROM prius_mpg
WHERE date < New.date
ORDER BY date DESC
LIMIT 1);
And here are the results of the view. Note how row 20 is out of order but it still calculates correctly the trip mileage and MPG.
+----+------------+---------+---------+--------------+------------------+ | id | date | mileage | gallons | trip_mileage | mpg | +----+------------+---------+---------+--------------+------------------+ | 1 | 2005-02-14 | 280 | 8.615 | 280 | 32.501450957632 | | 2 | 2005-02-27 | 480 | 4.775 | 200 | 41.8848167539267 | | 3 | 2005-03-19 | 713 | 7.213 | 233 | 32.3027866352419 | | 4 | 2005-04-09 | 999 | 7.86 | 286 | 36.3867684478371 | | 5 | 2005-04-11 | 1172 | 3.174 | 173 | 54.5053560176434 | | 6 | 2005-05-05 | 1560 | 8.889 | 388 | 43.6494543818202 | | 7 | 2005-06-07 | 1985 | 9.815 | 425 | 43.301069791136 | | 8 | 2005-07-03 | 2444 | 9.868 | 459 | 46.5139845966761 | | 9 | 2005-08-13 | 2762 | 7.728 | 318 | 41.1490683229814 | | 10 | 2005-09-11 | 3271 | 10.072 | 509 | 50.5361397934869 | | 11 | 2005-10-24 | 3646 | 8.953 | 375 | 41.8854015413828 | | 12 | 2005-10-30 | 3959 | 6.583 | 313 | 47.5467112258849 | | 13 | 2005-11-04 | 4184 | 4.538 | 225 | 49.5813133539004 | | 14 | 2005-11-21 | 4631 | 8.742 | 447 | 51.1324639670556 | | 15 | 2005-12-31 | 4897 | 8.511 | 266 | 31.2536717189519 | | 16 | 2006-02-02 | 5609 | 7.83 | 712 | 90.9323116219668 | | 17 | 2006-03-01 | 6064 | 3.38 | 120 | 35.5029585798817 | | 18 | 2006-03-13 | 6400 | 7.171 | 336 | 46.8553897643285 | | 19 | 2006-03-22 | 6605 | 5.399 | 205 | 37.9699944434154 | | 20 | 2006-02-16 | 5944 | 7.957 | 335 | 42.1012944577102 | | 21 | 2006-04-06 | 6974 | 7.774 | 369 | 47.465912014407 | | 22 | 2006-04-23 | 7316 | 7.102 | 342 | 48.1554491692481 | +----+------------+---------+---------+--------------+------------------+
I always wanted to appear on every row how many gallons of gas had been consumed up to that day and how much had spent on gas up to date but I could not figure out how. The only thing I could do was determine the sums up until now.
mysql> select sum(gallons) as gallons_to_date,
sum(cost) as cost_to_date from prius_mpg where date <= current_date;
+-----------------+--------------+
| gallons_to_date | cost_to_date |
+-----------------+--------------+
| 161.949 | 371.91 |
+-----------------+--------------+
1 row in set (0.01 sec)